package com.fqy.gmall.product.controller;

import com.fqy.gmall.common.result.Result;
import com.fqy.gmall.model.product.*;
import com.fqy.gmall.product.service.ManageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * User: fqy
 * Date: 2021/9/8
 * Time: 9:01
 * Describe:商品基础属性接口
 */

@Api(tags = "平台属性：商品基础属性接口")
@RestController
@RequestMapping("admin/product")
//@CrossOrigin
public class BaseManageController {

    @Autowired
    private ManageService manageService;

    @ApiOperation("查询一级目录")
    @GetMapping("getCategory1")
    public Result getCategory1(){
        List<BaseCategory1> baseCategory1List = manageService.getCategory1();
        return Result.ok(baseCategory1List);
    }

    @ApiOperation("查询二级目录")
    @GetMapping("getCategory2/{category1Id}")
    public Result getCategory2(@PathVariable long category1Id){
        List<BaseCategory2> baseCategory2List = manageService.getCategory2(category1Id);
        return Result.ok(baseCategory2List);
    }

    @ApiOperation("查询三级目录")
    @GetMapping("getCategory3/{category2Id}")
    public Result getCategory3(@PathVariable long category2Id){
        List<BaseCategory3> baseCategory3List = manageService.getCategory3(category2Id);
        return Result.ok(baseCategory3List);
    }
    /**
     * 根据分类Id 获取平台属性数据
     * 接口说明：
     *      1，平台属性可以挂在一级分类、二级分类和三级分类
     *      2，查询一级分类下面的平台属性，传：category1Id，0，0；   取出该分类的平台属性
     *      3，查询二级分类下面的平台属性，传：category1Id，category2Id，0；
     *         取出对应一级分类下面的平台属性与二级分类对应的平台属性
     *      4，查询三级分类下面的平台属性，传：category1Id，category2Id，category3Id；
     *         取出对应一级分类、二级分类与三级分类对应的平台属性
     * /admin/product/attrInfoList/{category1Id}/{category2Id}/{category3Id}
     * @param category1Id
     * @param category2Id
     * @param category3Id
     * @return
     */
     @ApiOperation("根据分类Id 获取平台属性数据")
     @GetMapping("attrInfoList/{category1Id}/{category2Id}/{category3Id}")
    public Result getAttrInfoListById(
            @PathVariable Long category1Id,
            @PathVariable Long category2Id,
            @PathVariable Long category3Id
     ){
         List<BaseAttrInfo> baseAttrInfoList = manageService.getAttrInfoListById(category1Id,category2Id,category3Id);
         return Result.ok(baseAttrInfoList);
     }

    /**
     * 更新操作：
     *      步骤： 1. 回调显示  2用户操作数据（修改（info表和value表） 新增 删除 ） 3.保存数据
     *      修改+添加
     *         1.有id判断为修改 无id判定为添加
     *         2.操作俩张表的修改并且是1对多的关系
     *         一定要分俩步：先删除，再新增！
     *         为什么？ 如 手机   三星 摩托罗拉 华为 小米
     *               修改  手机   三星 摩托罗拉 华为 vivo
     *               删除  手机   三星 摩托罗拉 华为
     *         系统无法判断 到底是那些操作
     *         所以需要 直接先把 属性值表删了 然后转换为新增操作
     *
     */
    /**
     * 保存修改或新增后的属性信息以其属性值
     * @param baseAttrInfo
     * @return
     */
    //admin/product/saveAttrInfo
    @ApiOperation("更新之保存数据：保存修改或新增后的属性信息以其属性值")
    @PostMapping("saveAttrInfo")
    public Result<BaseAttrInfo> saveAttrInfo(@RequestBody BaseAttrInfo baseAttrInfo){
         manageService.saveAttrInfo(baseAttrInfo);
         return Result.ok();
    }

    /**
     * 更新之回调显示信息：根据平台属性Id 获取到平台属性值集合
     *      俩种方式：1.直接获取base_attr_value表中的数据！
     *              2.间接通过BaseAttrInfo类封装 base_attr_info表和value表
     * @param attrId
     * @return
     */
    //admin/product/getAttrValueList/{attrId}
    @ApiOperation("更新之回调显示信息：根据平台属性Id 获取到平台属性值集合")
    @GetMapping("getAttrValueList/{attrId}")
    public Result getAttrValueList(@PathVariable Long attrId){
        //  获取数据 ： 本质直接获取这个表中的数据！
        //  select * from base_attr_value where attr_id = attrId;
//        List<BaseAttrValue> attrValueList = manageService.getAttrValueList(attrId);
        //  可以更加复合业务：可以从平台属性（类BaseAttrInfo）中获取平台属性值集合！
        //  select * from base_attr_info where id = attrId;
        //获取平台属性信息 并且将属性值集合封装到BaseAttrInfo类中
        BaseAttrInfo baseAttrInfo = manageService.getBaseAttrInfo(attrId);
        //通过平台属性信息获取属性值集合
        return Result.ok(baseAttrInfo.getAttrValueList());
    }

}
